LiveTa API 可选连接方式与本机自助配对助手

手机只装 LiveTa：Cloudflare Tunnel + Access Service Token
手机安装 Tailscale：Tailscale 私有连接
已有可靠 HTTPS 入口：继续使用现有 HTTPS 方式

在已有 LiveTa API 的电脑上运行：
python3 connection-mode.py choose
工具会引导选择 1 或 2。当前安装工具负责连接组件，不负责从零部署 TeslaMate，也不是已发布的公开镜像安装器。必须先有正在运行的 livelight-connector。不会自动修改现有 TeslaMate 配置，不修改现有手机连接。

Cloudflare 模式
管理员使用自己的 Cloudflare 账户和域名创建持久命名隧道，源站配置 http://127.0.0.1:8080。不得将数据库或 MQTT 作为源站。公网 API 发布需所有者明确授权。
在 Cloudflare Access 创建 Self-hosted 应用，保护整个 API 主机名，包括 /api/health、/api/pair 和所有车况、历史、照片接口。配置 Service Auth 策略，只允许本手机的 Service Token；不要使用 Allow Everyone 或 Bypass。建议每台手机单独创建有限有效期的 Service Token，便于独立轮换、撤销。
Tunnel 运行令牌只保存在电脑，Access Client ID / Client Secret 用于手机访问。两者不能混用；账户级 API Key 不进入本工具或 App。
python3 connection-mode.py cloudflare-configure --hostname api.example.com
工具通过隐藏输入保存 Tunnel 令牌及此手机的 Access Service Token，用于电脑端连通验证。权限600，不打印到日志。旧v1二维码不包含Access凭据；本机助手的CF v2二维码包含Access凭据，仅供私密扫码，不得分享。
python3 connection-mode.py cloudflare-start
python3 connection-mode.py cloudflare-verify
verify 要求无凭据请求被拒绝、带专用 Service Token 请求通过，避免只因“能访问”就误认为 Access 已保护接口。
python3 connection-mode.py cloudflare-pair
在本机打开 runtime/simple-pairing.html。手机 LiveTa 连接页选择 Tunnel + Access，填写 Client ID 与 Client Secret，再扫描一次性配对二维码、核对域名并连接。
手机钥匙串按 HTTPS 域名和端口隔离存储凭据；仅发送到该地址的 /api/ 接口，不跟随重定向发送密钥。车辆配对 Bearer 验证仍保留。Access 凭据撤销或过期后，到设置的 TeslaMate 连接页面更新即可，不应删除车辆配对。服务令牌不会自动续期；轮换由账户所有者执行。
此模式不需要苹果开发者会员，不等同于 APNs 锁屏持续推送。

Tailscale 模式
python3 connection-mode.py tailscale-start
仅创建带自身标签的 Tailscale 官方 Docker 容器，不开放公网端口、不启用 Funnel、不使用共用登录密钥。用户按输出命令登录自己的 tailnet；登录属于用户授权，安装器不代登录。
首次使用须在 Tailscale 管理中启用 MagicDNS/HTTPS（若尚未启用）。
python3 connection-mode.py tailscale-finish
创建只在 tailnet 可达的 HTTPS Serve，然后生成 runtime/tailscale-pairing.html。iPhone 安装 Tailscale、连接同一 tailnet，再用 LiveTa 扫码。已有宿主机 Tailscale 不会被停止或覆盖；不应在已有可用连接上盲目启动重复节点。

维护
两种连接组件共享现有 API 容器网络命名空间。API 容器被重新创建后，需要重新创建对应连接组件以绑定新网络命名空间；当前尚未提供自动追随重建的守护程序，不能声称免维护。
Cloudflare 回退：python3 simple-mode/manage.py stop，只移除本工具创建的 tunnel 容器。原 Tailscale 入口保留。
关闭新 Tailscale 组件时只处理 liveta-tailscale 容器，不修改宿主机 Tailscale、其他容器或网络权限。注销节点和撤销令牌由用户在自己的账户进行。
不要公开分享 runtime 目录、配对二维码或服务令牌。Cloudflare 会代理并处理车况请求与授权头，已在 App 隐私说明中提示。

状态与费用
当前代码可选择两种方式，模拟器 UI 与本地策略测试已完成；没有真实 Tunnel + Access 就不能声称端到端可用。实际安装部署状态见 Verification/2026-11-05/connection-options/release.json。
Cloudflare 当前免费额度内的个人使用预计无额外 Tunnel/Access 费用，域名续费另计；不自动购买或升级。多人托管部署须另行核对 Tunnel 和 Access 席位额度。此候选没有创建 Cloudflare 资源或产生新增已核实账单，不能将未核实费用写成实际扣款 $0。
Tailscale 费用适用用户自身账户方案；本工具不购买套餐。

架构决定（2026-11-05）：保留 API 与 cloudflared 两个独立容器；不采用单容器双进程。未来一键安装统一创建、启动和维护两项服务，Tailscale方案不要求启动Tunnel。当前仍有前述API重建后的网络绑定限制，固定内部网络优化尚未部署。

本机自助页面已实现：双击setup.command，或运行python3 setup/server.py。可选择连接方式、保存配置、检查连接、生成v1/v2二维码及识别使用/到期状态。完整说明见setup/SETUP.txt。公开镜像、签名安装器以及全新客户主机验收仍未完成，不应视作公开正式发行。
